package com.epic.rest.assetmgr;

import com.epic.inter.assetmgr.IAsset;
import com.epic.po.assetmgr.AssetInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.annotation.Resource;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

@Path("/v1/assets")
@Component("AssetResource")
//@Service
public class AssetResource {
    private static Logger logger =  LoggerFactory.getLogger(AssetResource.class);

//    @Resource 需要看下两个的区别 一个是javax一个是dubbo的注解
    @DubboReference(check = false)
    public IAsset iAsset;

    @Path("test")
    @GET
    @Produces("application/json;charset=UTF-8")
    public String test(@Context HttpServletRequest request,
                       @QueryParam("args") String args){

//        Long requestId = HttpHelper.getRequestId(request);
        try{
            return iAsset.testAsset(args);
        }catch (Exception e){
            logger.error(e.getMessage());
        }
        return "error";
    }

    @Path("test2")
    @GET
    @Produces("application/json;charset=UTF-8")
    public String test2(@Context HttpServletRequest request){
        return "asset test2 in the rest";
    }


    @Path("test3")
    @GET
    @Produces("application/json;charset=UTF-8")
    public List<AssetInfo> test3(@Context HttpServletRequest request){
        List<AssetInfo> assetInfos = new ArrayList<AssetInfo>();
        try{
            assetInfos = iAsset.getAssetList();
        }catch (Exception e){
            logger.error(e.getMessage());
        }
        return assetInfos;
    }
    @Path("/lbtest")
    @GET
    @Produces("application/json;charset=UTF-8")
    public List<String> TestLb(@Context HttpServletRequest request){
        ArrayList<String> ret = new ArrayList<>();

        try{
            String file ="/etc/hostname";

            BufferedReader reader = new BufferedReader(new FileReader(file));
            String currentLine = reader.readLine();
            reader.close();
            ret.add(currentLine);
        }catch (IOException e){
            System.out.println(e.getMessage());
        }
        return ret;
    }
}

/**
 * Component 把类实例化 spring
 * org.springframework.stereotype
 * 1、@controller 控制器（注入服务）
 * 2、@service 服务（注入dao）
 * 3、@repository dao（实现dao访问）
 * 4、@component （把普通pojo实例化到spring容器中，相当于配置文件中的）
 * @Component,@Service,@Controller,@Repository注解的类，并把这些类纳入进spring容器中管理。
 * 下面写这个是引入component的扫描组件
 * <context:component-scan base-package=”com.xxxx”>
 *
 * 其中base-package为需要扫描的包（含所有子包）
 * 1、@Service用于标注业务层组件
 * 2、@Controller用于标注控制层组件(如struts中的action)
 * 3、@Repository用于标注数据访问组件，即DAO组件.
 * 4、@Component泛指组件，当组件不好归类的时候，我们可以使用这个注解进行标注。
 * @Service public class UserServiceImpl implements UserService { }
 * @Repository public class UserDaoImpl implements UserDao { } getBean的默认名称是类名（头字母小写），如果想自定义，可以@Service(“***”) 这样来指定，这种bean默认是单例的，如果想改变，可以使用@Service(“beanName”)
 * @Scope(“prototype”)来改变。可以使用以下方式指定初始化方法和销毁方法（方法名任意）： @PostConstruct public void init() { }
 */